/*******************************************************************************
 * Copyright 2011 @ Kapil Viren Ahuja
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package com.kapil.framework.lang;

/**
 * <p>
 * Utility methods for Arrays.
 * </p>
 */
public final class ArrayUtils
{
    private ArrayUtils()
    {
    }

    /**
     * <p>
     * Merges content of two <code>byte</code> arrays.
     * </p>
     * 
     * @param first An array of bytes.
     * @param second An array of bytes.
     * @return An array of bytes containing content of both arrays.
     * 
     */
    public static byte[] mergeByteArrays(byte[] first, byte[] second)
    {
        byte[] result = null;

        if (first == null && second != null)
        {
            // First array is blank while the second contains some values, therefore result should contain all values
            // from second.
            result = second;
        }
        else if (first != null && second == null)
        {
            // Second array is blank while the first contains some values, therefore result should contain all values
            // from first.
            result = first;
        }
        else
        {
            int firstLength = first.length;
            int secondLength = second.length;

            result = new byte[firstLength + secondLength];
            System.arraycopy(first, 0, result, 0, firstLength);
            System.arraycopy(second, 0, result, firstLength, secondLength);
        }

        return result;
    }
}
